package com.jrx.anytxn.investor.dto.loan;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

/**
 * 还款顺序响应
 *
 * @author 黄秋平
 * @create 2020/6/18
 */
public class AmRepaymentPlanInvestorInfoRes implements Serializable {

    /**
     * 自增主键
     * 表字段:id
     */
    private Long id;

    /**
     * 租户ID
     * 表字段:tenant_id
     */
    private String tenantId;

    /**
     * 出资方贷款订单id
     * 表字段:investor_loan_id
     */
    private String investorLoanId;

    /**
     * 出资方ID
     * 表字段:investor_id
     */
    private String investorId;

    /**
     * 出资方ID名称
     * 表字段:investor_id
     */
    private String chineseName;

    /**
     * 贷款id
     * 表字段:loan_id
     */
    private String loanId;

    /**
     * 第几期
     * 表字段:billing_tenor
     */
    private Integer billingTenor;

    /**
     * 机构号
     * 表字段:organization_id
     */
    private String organizationId;

    /**
     * 渠道id
     * 表字段:channel
     */
    private String channel;

    /**
     * 状态 0 = 未抛; 1 = 正常; 2 = 逾期; 6 = 转分期; 7 = 提前结清; 8 = 正常结清; 9 = 取消;
     * 表字段:plan_status
     */
    private String planStatus;

    /**
     * 产品id
     * 表字段:product_id
     */
    private String productId;

    /**
     * 客户id
     * 表字段:customer_id
     */
    private String customerId;
    /**
     * 当期总金额
     * 表字段:total_amount
     */
    @JsonSerialize(using= ToStringSerializer.class)
    private BigDecimal totalAmount;

    /**
     * 当期本金
     * 表字段:principal_amount
     */
    @JsonSerialize(using= ToStringSerializer.class)
    private BigDecimal principalAmount;

    /**
     * 当期利息
     * 表字段:interest_amount
     */
    @JsonSerialize(using= ToStringSerializer.class)
    private BigDecimal interestAmount;

    /**
     * 当期费用
     * 表字段:fee_amount
     */
    @JsonSerialize(using= ToStringSerializer.class)
    private BigDecimal feeAmount;

    /**
     * 当期已还本金
     * 表字段:repay_principal
     */
    @JsonSerialize(using= ToStringSerializer.class)
    private BigDecimal repayPrincipal;

    /**
     * 当期已还利息
     * 表字段:repay_interest
     */
    @JsonSerialize(using= ToStringSerializer.class)
    private BigDecimal repayInterest;

    /**
     * 当期已还罚息
     * 表字段:repay_penalty_interest
     */
    @JsonSerialize(using= ToStringSerializer.class)
    private BigDecimal repayPenaltyInterest;

    /**
     * 当期已还复利
     * 表字段:repay_compound_interest
     */
    @JsonSerialize(using= ToStringSerializer.class)
    private BigDecimal repayCompoundInterest;

    /**
     * 当期已还费用
     * 表字段:repay_fee
     */
    @JsonSerialize(using= ToStringSerializer.class)
    private BigDecimal repayFee;

    /**
     * 还款日
     * 表字段:payment_due_date
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date paymentDueDate;

    /**
     * 还款交易日期
     * 表字段:transaction_date
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date transactionDate;

    /**
     * 结清日期
     * 表字段:payoff_date
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date payoffDate;

    /**
     * 当期免除金额
     * 表字段:waived_amount
     */
    private BigDecimal waivedAmount;

    /**
     * 债权转移标识 0 = 否; 1 = 是;
     * 表字段:bal_trans_flag
     */
    private String balTransFlag;

    /**
     * 代偿标识 0 = 否; 1 = 是;
     * 表字段:compensate_flag
     */
    private String compensateFlag;

    /**
     * 延滞天数
     * 表字段:delq_days
     */
    private Integer delqDays;

    /**
     * 当期逾期金额 当期利息（interest_amount）- 当期已还利息（repay_interest）+ 当期费用（fee_amount） - 当期已还费用（repay_fee）+ 当期本金（principal_amount） - 当前已还本金（repay_principal）
     * 表字段:over_due_amount
     */
    private BigDecimal overDueAmount;

    /**
     * 核销标识  0 = 否; 1 = 是;
     * 表字段:chargeoff_flag
     */
    private String chargeoffFlag;

    /**
     * 当期起息日
     * 表字段:intr_start_date
     */
    private Date intrStartDate;

    /**
     * 债务归属 00=客户; 01=商户; 02=平台; 03=资金方; 04=渠道;
     * 表字段:liability_flag
     */
    private String liabilityFlag;

    /**
     * 创建时间
     * 表字段:create_time
     */
    private Date createTime;

    /**
     * 最后更新时间
     * 表字段:update_time
     */
    private Date updateTime;

    /**
     * 最后更新操作员
     * 表字段:update_by
     */
    private String updateBy;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getTenantId() {
        return tenantId;
    }

    public void setTenantId(String tenantId) {
        this.tenantId = tenantId;
    }

    public String getInvestorLoanId() {
        return investorLoanId;
    }

    public void setInvestorLoanId(String investorLoanId) {
        this.investorLoanId = investorLoanId;
    }

    public String getInvestorId() {
        return investorId;
    }

    public void setInvestorId(String investorId) {
        this.investorId = investorId;
    }

    public String getLoanId() {
        return loanId;
    }

    public void setLoanId(String loanId) {
        this.loanId = loanId;
    }

    public Integer getBillingTenor() {
        return billingTenor;
    }

    public void setBillingTenor(Integer billingTenor) {
        this.billingTenor = billingTenor;
    }

    public String getOrganizationId() {
        return organizationId;
    }

    public void setOrganizationId(String organizationId) {
        this.organizationId = organizationId;
    }

    public String getChannel() {
        return channel;
    }

    public void setChannel(String channel) {
        this.channel = channel;
    }

    public String getPlanStatus() {
        return planStatus;
    }

    public void setPlanStatus(String planStatus) {
        this.planStatus = planStatus;
    }

    public String getProductId() {
        return productId;
    }

    public void setProductId(String productId) {
        this.productId = productId;
    }

    public String getCustomerId() {
        return customerId;
    }

    public void setCustomerId(String customerId) {
        this.customerId = customerId;
    }

    public BigDecimal getTotalAmount() {
        return totalAmount;
    }

    public void setTotalAmount(BigDecimal totalAmount) {
        this.totalAmount = totalAmount;
    }

    public BigDecimal getPrincipalAmount() {
        return principalAmount;
    }

    public void setPrincipalAmount(BigDecimal principalAmount) {
        this.principalAmount = principalAmount;
    }

    public BigDecimal getInterestAmount() {
        return interestAmount;
    }

    public void setInterestAmount(BigDecimal interestAmount) {
        this.interestAmount = interestAmount;
    }

    public BigDecimal getFeeAmount() {
        return feeAmount;
    }

    public void setFeeAmount(BigDecimal feeAmount) {
        this.feeAmount = feeAmount;
    }

    public BigDecimal getRepayPrincipal() {
        return repayPrincipal;
    }

    public void setRepayPrincipal(BigDecimal repayPrincipal) {
        this.repayPrincipal = repayPrincipal;
    }

    public BigDecimal getRepayInterest() {
        return repayInterest;
    }

    public void setRepayInterest(BigDecimal repayInterest) {
        this.repayInterest = repayInterest;
    }

    public BigDecimal getRepayPenaltyInterest() {
        return repayPenaltyInterest;
    }

    public void setRepayPenaltyInterest(BigDecimal repayPenaltyInterest) {
        this.repayPenaltyInterest = repayPenaltyInterest;
    }

    public BigDecimal getRepayCompoundInterest() {
        return repayCompoundInterest;
    }

    public void setRepayCompoundInterest(BigDecimal repayCompoundInterest) {
        this.repayCompoundInterest = repayCompoundInterest;
    }

    public BigDecimal getRepayFee() {
        return repayFee;
    }

    public void setRepayFee(BigDecimal repayFee) {
        this.repayFee = repayFee;
    }

    public Date getPaymentDueDate() {
        return paymentDueDate;
    }

    public void setPaymentDueDate(Date paymentDueDate) {
        this.paymentDueDate = paymentDueDate;
    }

    public Date getTransactionDate() {
        return transactionDate;
    }

    public void setTransactionDate(Date transactionDate) {
        this.transactionDate = transactionDate;
    }

    public Date getPayoffDate() {
        return payoffDate;
    }

    public void setPayoffDate(Date payoffDate) {
        this.payoffDate = payoffDate;
    }

    public BigDecimal getWaivedAmount() {
        return waivedAmount;
    }

    public void setWaivedAmount(BigDecimal waivedAmount) {
        this.waivedAmount = waivedAmount;
    }

    public String getBalTransFlag() {
        return balTransFlag;
    }

    public void setBalTransFlag(String balTransFlag) {
        this.balTransFlag = balTransFlag;
    }

    public String getCompensateFlag() {
        return compensateFlag;
    }

    public void setCompensateFlag(String compensateFlag) {
        this.compensateFlag = compensateFlag;
    }

    public Integer getDelqDays() {
        return delqDays;
    }

    public void setDelqDays(Integer delqDays) {
        this.delqDays = delqDays;
    }

    public BigDecimal getOverDueAmount() {
        return overDueAmount;
    }

    public void setOverDueAmount(BigDecimal overDueAmount) {
        this.overDueAmount = overDueAmount;
    }

    public String getChargeoffFlag() {
        return chargeoffFlag;
    }

    public void setChargeoffFlag(String chargeoffFlag) {
        this.chargeoffFlag = chargeoffFlag;
    }

    public Date getIntrStartDate() {
        return intrStartDate;
    }

    public void setIntrStartDate(Date intrStartDate) {
        this.intrStartDate = intrStartDate;
    }

    public String getLiabilityFlag() {
        return liabilityFlag;
    }

    public void setLiabilityFlag(String liabilityFlag) {
        this.liabilityFlag = liabilityFlag;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public Date getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

    public String getUpdateBy() {
        return updateBy;
    }

    public void setUpdateBy(String updateBy) {
        this.updateBy = updateBy;
    }

    public String getChineseName() {
        return chineseName;
    }

    public void setChineseName(String chineseName) {
        this.chineseName = chineseName;
    }
}
